# include <iostream>
# include <functional>  // 函数包装器 ，用来统一函数，的调用形式



// 自由函数，不在类里面
void freedom_func(std::string name)
{
    std::cout << name << "这是个自由函数" << std::endl;
}

// 成员函数

class FileSave
{
    private:
        /* data */

    public:
        FileSave(/* args */) {}
        ~FileSave() {}    // 析构函数

        void save_file(std::string name)
        {
            std::cout << name << "这是个成员函数" << std::endl;
        }
};

int main(){
    FileSave file;
    auto save_file = [](const std::string& name)->void{
        std::cout << name << "这是个匿名函数" << std::endl;
    };
    std::function<void(std::string)> func = freedom_func;
    // 参数：1.函数指针(将要调用的函数的类的指针），2.声明的类的对象的指针,3.占位符，std::placeholders::_(是几个就写几)
    std::function<void(std::string)> func2 = std::bind(&FileSave::save_file, &file,std::placeholders::_1); 
    std::function<void(std::string)> func3 = save_file;

    // 变成统一调用
    func("保存文件");
    func2("保存文件");
    func3("保存文件");

}